回归模型:
线性回归模型
感知器模型
最简单的模型,多层感知器MLP即最简单的深度学习网络。
感知器模型通过循环修正计算误差进行修正,因此没有没有学习率;在学习中,需要指定学习次数(例如学习样本数),否则感知器模型会无休止的进行下去。
基础(单层)感知器模型是非常弱的模型,不会存在过拟合的情况。
sklearn.linera_model.Perceptron(penalty=None, alpha=0.0001, fit_intercept=True, n_iter=5, shuffle=True, verbose=0, eta0=1.0, n_jobs=1. random_state = 0, class_weight=None, warm_start=False)
参数
- penalty:正则惩罚项,默认为0
- fit_intercept:截距
- n_iter:迭代次数
- shuffle:洗牌
- verbose:打印日志等级
- eta0 :学习率
- n_jobs:启动线程数,-1代表最大
实例
df = pd.read_csv(r'D:\BaiduYunDownload\sklearn\3.0 线性模型\adultTest.csv')
#将object变量(字符串)制成稀疏矩阵,class是目标变量,不用放入
dfNew=pd.get_dummies(df,columns=['workclass','education','marital-status','occupation','relationship','race','sex', 'native-country'])
dfNew['target'] = dfNew['class'].apply(lambda x: 1 if x == r' <=50K' else 0) # 将结果二分为1和0
xdata = dfNew.drop(['class','target'],axis = 1) # 测试集
ydata = dfNew['target'] # 结果集
from sklearn.linear_model import Perceptron # 调用感应器模型函数
per = Perceptron(n_iter=20) # 创建对象并设定迭代次数为20
per.fit(xdata,ydata) # 训练模型
print(per.predict(xdata)) # 对模型进行预测
print(per.score(xdata,ydata)) # 对模型进行准确率评估
tips:感知器没有概率值
线性回归模型
sklearn.linear_model.LinearRegression9(fit_intercept = True, normalize = False, copy_X = True, n_jobs = 1)
fit_intercept
:是否计算截距
normalize
:是否对整个样本进行数据标准化,线性模型并不依赖于正则,所以此参数无意义。
线性回归模型需要接受一个连续性的变量,以达到预测。
在线性模型中,更复杂的模型会用到alpha惩罚项,简称a,并且会通过数据集的定义方式选择raige函数和lasso函数。
raige和lasso的区别
raige接受l2的正则,lasso接受l1的正则。
raige:(w1)2+(w2)2+(w3)^2…,每个权重平方相加;lasso:|w1|+|w2|+|w3|…,每个权重绝对值相加。
lasso接受的l1范数,所以得到的解可能是稀疏的,导致很多系数的权重都为0;raige接受l2的范数,得到的解不会为0。
从方便的角度考虑,我们更多的使用l2范数的raige。
交叉验证(Cross validation)
交叉验证用于防止模型过于复杂而引起的过拟合。有时亦称循环估计,是一种统计学上将数据样本切割成较小子集的实用方法。于是可以先在一个子集上做分析,而其它子集则用来做后续对此分析的确认及验证。交叉验证是一种评估统计分析、机器学习算法对独立于训练数据的数据集的泛化能力(generalize)。
在sklearn的在线性模型中,为了保证模型值,我们可以使用后续加CV的函数来进行交叉验证:
alpha
:接受一个数组,数组内是所有认为有效的a的值,函数会自动选择最优值
cv
:接受交叉验证的切分份数
scoring
:评估指标,不填写会选择默认指标进行判断,也接受填写最小绝对值误差/最小均方误差,一般不填写
其他同上
在进行CV时,有时可能会遇到被切分的样本内没有1,或者样本不均匀的问题,因此我们调用分层函数进行解决:
from sklearn.cross_validation import StratifiedKFold#调用分层函数
sf = StratifiedKFold(ydata,n_folds=5) # 创建对象并选择分为几层,避免发生稀疏矩阵的数据不均匀的问题
这种情况在分类模型中才会发生,回归模型的y是连续值,因此不必进行分层。